package stud.mpgame.network;

import org.apache.mina.core.buffer.IoBuffer;

/**
 * Элементарная сущность, передаваемая по сети.
 *
 * @author f.pavel91@gmail.com
 * @version 1.4
 */

public abstract class UserObject {

    /**
     * Конструктор по умолчанию.
     *
     * Вы можете переопределить его для инициализации некоторых переменных.
     *
     * Например,
     * <pre>
     *     SomeClass extends UserObject {
     *
     *          SomeType SomeVar;
     *
     *          SomeClass() {
     *              SomeVar = new SomeType();
     *          }
     *     }
     * </pre>
     */
    public UserObject() {}

    /**
     * Чтение UserObject из буфера.
     *
     * Вы можете переопределить этот метод для Вашего UserObject.
     *
     * Например,
     * <pre>
     *     SomeClass extends UserObject {
     *          //some code
     *          public void readExternal(IoBuffer buffer, Message owner) {
     *              int x = buffer.getInt();
     *              int y = buffer.getInt();
     *          }
     *          //some code
     *     }
     * </pre>
     *
     * @param buffer массив байт, содержащих описание UserObject
     * @param owner владелец UserObject, содержит его внутри себя
     */
    public void readExternal(IoBuffer buffer, Message owner) {}

    /**
     * Запись UserObject в буфер.
     *
     * Вы можете переопределить этот метод для Вашего UserObject.
     *
     * Например,
     * <pre>
     *     SomeClass extends UserObject {
     *          //some code
     *          public void writeExternal(IoBuffer buffer, Message owner) {
     *              buffer.putInt(x);
     *              buffer.putInt();
     *          }
     *          //some code
     *     }
     * </pre>
     * @param buffer массив байт, в него следует записать UserObject
     * @param owner владелец UserObject, содержит его внутри себя
     */
    public void writeExternal(IoBuffer buffer, Message owner) {}

}
